์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ ํตํด ์ต๊ณ ์ ์น ์ฑ๋ฅ์ ๊ฒฝํํ์ธ์. ์ด ์ข ํฉ ๊ฐ์ด๋๋ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ต์ ํ, ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์, ์ฌ์ฉ์ ๊ฒฝํ ํฅ์์ ์ํ ๋๊ตฌ, ๊ธฐ์ , ์ ๋ต์ ์์ธํ ์ค๋ช ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํ๋กํ์ผ๋ง ๋ง์คํฐํ๊ธฐ: ๊ธ๋ก๋ฒ ์ฑ๋ฅ ๋ถ์ ๊ฐ์ด๋
์ค๋๋ ๊ณผ ๊ฐ์ด ์ํธ ์ฐ๊ฒฐ๋ ์ธ์์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์ ์ง๋ฆฌ์ ์์น, ๊ธฐ๊ธฐ, ๋คํธ์ํฌ ์กฐ๊ฑด์ ๊ด๊ณ์์ด ๋น ๋ฅด๊ณ , ๋ฐ์์ฑ์ด ์ข์ผ๋ฉฐ, ์ํํด์ผ ํฉ๋๋ค. ํ๋ ์น ๊ฐ๋ฐ์ ์ค์ถ์ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ฌํ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ์ค์ถ์ ์ธ ์ญํ ์ ํฉ๋๋ค. ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ๊ณผ ๊ธฐ๋ฅ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค๋ ํจ๊ป ์ปค์ง๋๋ค. ์ต์ ํ๋์ง ์์ ๋ฒ๋ค์ ๋๋ฆฐ ๋ก๋ฉ ์๊ฐ, ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๋ ์ํธ์์ฉ, ๊ทธ๋ฆฌ๊ณ ๊ถ๊ทน์ ์ผ๋ก๋ ์ค๋งํ ์ฌ์ฉ์์ธต์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ด ํ์๋ถ๊ฐ๊ฒฐํด์ง๋๋ค.
๋ชจ๋ ํ๋กํ์ผ๋ง์ ๋จ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ์ ๊ทธ์น์ง ์์ต๋๋ค. ์ด๋ ์ฝ๋๋ฒ ์ด์ค์ ๊ตฌ์ฑ๊ณผ ์คํ์ ๊น์ด ์ดํดํ์ฌ ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ด๋์ด๋ด๋ ๊ฒ์ ๋๋ค. ๋ฒํํ ๋๋์์ 4G ๋คํธ์ํฌ์์ ์ ์ํ๋ ์ฌ์ฉ์๋ฟ๋ง ์๋๋ผ ์ธ๋ด ๋ง์์ ์ ํ๋ 3G ์ฐ๊ฒฐ๋ก ์ ์ํ๋ ์ฌ์ฉ์์๊ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ต์ ์ผ๋ก ์๋ํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ํจ๊ณผ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํ ๋จ๊ณ ๋์ด์ฌ๋ฆฌ๋ ๋ฐ ํ์ํ ์ง์, ๋๊ตฌ, ์ ๋ต์ ์ ๊ณตํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋๊ณผ ๊ทธ ์ํฅ ์ดํดํ๊ธฐ
ํ๋กํ์ผ๋ง์ ๋ฐ์ด๋ค๊ธฐ ์ ์, ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ด ๋ฌด์์ด๋ฉฐ ์ ์ฑ๋ฅ์ ํต์ฌ์ธ์ง ํ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ชจ๋์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๋ ๋ฆฝ์ ์ธ ๋จ์๋ก ๊ตฌ์ฑํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ฌํ ๋ชจ๋์ฑ์ ๋ ๋์ ์ฝ๋ ๊ตฌ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ์ด์งํ์ฌ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฐ์ ํ์ฑํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ์งํ
- CommonJS (CJS): ์ฃผ๋ก Node.js ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ฉฐ, CommonJS๋ ๋ชจ๋์ ๊ฐ์ ธ์ค๊ธฐ ์ํด `require()`๋ฅผ, ๋ด๋ณด๋ด๊ธฐ ์ํด `module.exports` ๋๋ `exports`๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋๊ธฐ์์ผ๋ก ์๋ํ๋ฏ๋ก ๋ชจ๋์ด ์์ฐจ์ ์ผ๋ก ๋ก๋๋ฉ๋๋ค.
- ECMAScript ๋ชจ๋ (ESM): ES2015์ ๋์ ๋ ESM์ `import`์ `export` ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. ESM์ ๋ณธ์ง์ ์ผ๋ก ๋น๋๊ธฐ์์ด์ด์ ์ ์ ๋ถ์(ํธ๋ฆฌ ์์ดํน์ ์ค์)๊ณผ ๋ณ๋ ฌ ๋ก๋ฉ์ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. ํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ์ค์ ๋๋ค.
๋ชจ๋ ์์คํ ์ ๊ด๊ณ์์ด, ๋ชฉํ๋ ๋์ผํฉ๋๋ค: ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌ ๊ฐ๋ฅํ ์กฐ๊ฐ์ผ๋ก ๋๋๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐฐํฌ๋ฅผ ์ํด ์ด๋ฌํ ์กฐ๊ฐ๋ค์ด ํจ๊ป ๋ฒ๋ค๋ง๋ ๋, ๊ทธ๋ค์ ์ด ํฌ๊ธฐ์ ๋ก๋ ๋ฐ ์คํ ๋ฐฉ์์ด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
๋ชจ๋์ด ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ
์์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์ผ๋ถ์ด๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ , ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ ๋ฐ์๊ตญ์ ๊ธฐ์ฌํฉ๋๋ค. ์ด ์ํฅ์ ์ฌ๋ฌ ํต์ฌ ์์ญ์์ ๋ํ๋ฉ๋๋ค:
- ๋ฒ๋ค ํฌ๊ธฐ: ๋ฒ๋ค๋ง๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ํฌ๊ธฐ๋ ๋ค์ด๋ก๋ ์๊ฐ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ฒ๋ค์ด ํด์๋ก ๋ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋์ด์ผ ํ๋ฉฐ, ์ด๋ ์ธ๊ณ ์ฌ๋ฌ ์ง์ญ์์ ํํ ๋ณผ ์ ์๋ ๋๋ฆฐ ๋คํธ์ํฌ์์ ํนํ ํด๋กญ์ต๋๋ค.
- ํ์ฑ ๋ฐ ์ปดํ์ผ ์๊ฐ: ๋ค์ด๋ก๋ ํ, ๋ธ๋ผ์ฐ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํ๊ณ ์ปดํ์ผํด์ผ ํฉ๋๋ค. ํ์ผ์ด ํด์๋ก ์ฒ๋ฆฌ ์๊ฐ์ด ๊ธธ์ด์ ธ ์ํธ์์ฉ ๊ฐ๋ฅ ์๊ฐ(time-to-interactive)์ด ์ง์ฐ๋ฉ๋๋ค.
- ์คํ ์๊ฐ: ์๋ฐ์คํฌ๋ฆฝํธ์ ์ค์ ๋ฐํ์์ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ ๋ฐ์ ์๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๋นํจ์จ์ ์ด๊ฑฐ๋ ์ต์ ํ๋์ง ์์ ๋ชจ๋์ ๊ณผ๋ํ CPU ์ฌ์ดํด์ ์๋ชจํ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ๋ชจ๋, ํนํ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๊ด๋ฒ์ํ DOM ์กฐ์์ด ์๋ ๋ชจ๋์ ์๋นํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ์ฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํ๋ ๊ธฐ๊ธฐ์์ ์ฑ๋ฅ ์ ํ ๋๋ ์ถฉ๋์ ์ผ์ผํฌ ์ ์์ต๋๋ค.
- ๋คํธ์ํฌ ์์ฒญ: ๋ฒ๋ค๋ง์ ์์ฒญ ์๋ฅผ ์ค์ด์ง๋ง, ๊ฐ๋ณ ๋ชจ๋(ํนํ ๋์ import ์ฌ์ฉ ์)์ ์ฌ์ ํ ๋ณ๋์ ๋คํธ์ํฌ ํธ์ถ์ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ต์ ํํ๋ ๊ฒ์ ๊ธ๋ก๋ฒ ์ฌ์ฉ์์๊ฒ ๋งค์ฐ ์ค์ํ ์ ์์ต๋๋ค.
๋ชจ๋ ํ๋กํ์ผ๋ง์ '์ด์ ': ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ์๋ณ
์ ์ ์ ์ธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ ์ฌ์น๊ฐ ์๋๋ผ, ์ ์ธ๊ณ์ ์ผ๋ก ๊ณ ํ์ง์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํ ํ์ ์์์ ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋ํ ๋ค์๊ณผ ๊ฐ์ ์ค์ํ ์ง๋ฌธ์ ๋ตํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค:
- "์ ํํ ๋ฌด์ ๋๋ฌธ์ ์ด๊ธฐ ํ์ด์ง ๋ก๋๊ฐ ์ด๋ ๊ฒ ๋๋ฆฐ๊ฐ?"
- "์ด๋ค ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฒ๋ค ํฌ๊ธฐ์ ๊ฐ์ฅ ๋ง์ด ๊ธฐ์ฌํ๊ณ ์๋๊ฐ?"
- "๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ง๋ง ์ฌ์ ํ ๋ฉ์ธ ๋ฒ๋ค์ ํฌํจ๋ ์ฝ๋ ๋ถ๋ถ์ด ์๋๊ฐ?"
- "์ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๋ ๋๋์ด ๋๋๊ฐ?"
- "์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ค๋ณต๋๊ฑฐ๋ ๋์ผํ ์ฝ๋๋ฅผ ํฌํจํ๊ณ ์๋๊ฐ?"
์ด๋ฌํ ์ง๋ฌธ์ ๋ตํจ์ผ๋ก์จ, ํ๋กํ์ผ๋ง์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ ํํ ์์ธ์ ์ฐพ์๋ด์ด ์ถ์ธก์ ์ํ ๋ณ๊ฒฝ์ด ์๋ ๋ชฉํ ์งํฅ์ ์ธ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ด๋ฌํ ๋ถ์์ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ฐ ์๊ฐ์ ์ ์ฝํ๊ณ ์ต์ ํ ๋ ธ๋ ฅ์ด ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋ชจ๋ ์ฑ๋ฅ ํ๊ฐ๋ฅผ ์ํ ํต์ฌ ์งํ
ํจ๊ณผ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๋ ค๋ฉด ์ค์ํ ์งํ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์งํ๋ ๋ชจ๋์ ์ํฅ์ ๋ํ ์ ๋์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค:
1. ๋ฒ๋ค ํฌ๊ธฐ
- ์์ถ ์ ํฌ๊ธฐ: ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์๋ณธ ํฌ๊ธฐ์ ๋๋ค.
- ์ต์ํ๋ ํฌ๊ธฐ: ๊ณต๋ฐฑ, ์ฃผ์์ ์ ๊ฑฐํ๊ณ ๋ณ์ ์ด๋ฆ์ ์ค์ธ ํ์ ํฌ๊ธฐ์ ๋๋ค.
- Gzip/Brotli ์์ถ ํฌ๊ธฐ: ๋คํธ์ํฌ ์ ์ก์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ํ์ ํฌ๊ธฐ์ ๋๋ค. ์ด๊ฒ์ด ๋คํธ์ํฌ ๋ก๋ ์๊ฐ์ ๊ฐ์ฅ ์ค์ํ ์งํ์ ๋๋ค.
๋ชฉํ: ๋ชจ๋ ๋คํธ์ํฌ ์๋์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ค์ด๋ก๋ ์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด, ํนํ Gzip ์์ถ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ฅํ ํ ๋ง์ด ์ค์ด๋ ๊ฒ์ ๋๋ค.
2. ํธ๋ฆฌ ์์ดํน ํจ๊ณผ
ํธ๋ฆฌ ์์ดํน(๋๋ "๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ")์ ๋ฒ๋ค๋ง ๊ณผ์ ์์ ๋ชจ๋ ๋ด์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ ESM์ ์ ์ ๋ถ์ ๋ฅ๋ ฅ๊ณผ ์นํฉ(Webpack)์ด๋ ๋กค์ (Rollup)๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ์ ์์กดํฉ๋๋ค.
๋ชฉํ: ๋ฒ๋ค๋ฌ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ฒด ์ฝ๋์์ ์ฌ์ฉ๋์ง ์๋ ๋ชจ๋ export๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ๊ฑฐํ์ฌ ๋ถํ์ํ ์ฝ๋ ์ฆ๊ฐ(bloat)๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์ ๋๋ค.
3. ์ฝ๋ ์คํ๋ฆฌํ ์ด์
์ฝ๋ ์คํ๋ฆฌํ ์ ํฐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๋ ์์ ์ฃผ๋ฌธํ ์ฒญํฌ(chunk)๋ก ๋๋๋๋ค. ์ด ์ฒญํฌ๋ค์ ํ์ํ ๋๋ง(์: ์ฌ์ฉ์๊ฐ ํน์ ๊ฒฝ๋ก๋ก ์ด๋ํ๊ฑฐ๋ ๋ฒํผ์ ํด๋ฆญํ ๋) ๋ก๋๋ฉ๋๋ค.
๋ชฉํ: ์ด๊ธฐ ๋ค์ด๋ก๋ ํฌ๊ธฐ(์ฒซ ๋ ๋๋ง)๋ฅผ ์ต์ํํ๊ณ ์ค์ํ์ง ์์ ์์ฐ์ ๋ก๋ฉ์ ์ง์ฐ์์ผ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฒ์ ๋๋ค.
4. ๋ชจ๋ ๋ก๋ ๋ฐ ์คํ ์๊ฐ
- ๋ก๋ ์๊ฐ: ๋ชจ๋์ด๋ ์ฒญํฌ๊ฐ ๋ค์ด๋ก๋๋๊ณ ๋ธ๋ผ์ฐ์ ์ ์ํด ํ์ฑ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค.
- ์คํ ์๊ฐ: ๋ชจ๋ ๋ด์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑ๋ ํ ์คํ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค.
๋ชฉํ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํธ์์ฉ ๊ฐ๋ฅํ๊ณ ๋ฐ์์ฑ์ ๊ฐ์ถ๊ธฐ๊น์ง์ ์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด ๋ ์๊ฐ ๋ชจ๋๋ฅผ ์ค์ด๋ ๊ฒ์ ๋๋ค. ํนํ ํ์ฑ๊ณผ ์คํ์ด ๋๋ฆฐ ์ ์ฌ์ ๊ธฐ๊ธฐ์์ ์ค์ํฉ๋๋ค.
5. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋นํ๋ RAM์ ์์ ๋๋ค. ๋ชจ๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ด๋ฆฌ๋์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๋ฐํ์ฌ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
๋ชฉํ: ์ํํ ์๋์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํฉ๋ฆฌ์ ์ธ ํ๋ ๋ด๋ก ์ ์งํ๋ ๊ฒ์ ๋๋ค. ํนํ ๋ง์ ๊ธ๋ก๋ฒ ์์ฅ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ RAM์ด ์ ํ๋ ๊ธฐ๊ธฐ์์ ์ค์ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ ์ํ ํ์ ๋๊ตฌ ๋ฐ ๊ธฐ์
๊ฐ๋ ฅํ ์ฑ๋ฅ ๋ถ์์ ์ฌ๋ฐ๋ฅธ ๋๊ตฌ์ ๋ฌ๋ ค ์์ต๋๋ค. ๋ค์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ ๊ฐ์ฅ ๊ฐ๋ ฅํ๊ณ ๋๋ฆฌ ์ฑํ๋ ๋๊ตฌ๋ค์ ๋๋ค:
1. ์นํฉ ๋ฒ๋ค ์ ๋๋ผ์ด์ (๋ฐ ์ ์ฌ ๋ฒ๋ค๋ฌ ๋ถ์ ๋๊ตฌ)
์ด๊ฒ์ ๋ฒ๋ค ๊ตฌ์ฑ์ ์ดํดํ๋ ๋ฐ ์์ด ๊ฐ์ฅ ์๊ฐ์ ์ด๊ณ ์ง๊ด์ ์ธ ๋๊ตฌ๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๋ฒ๋ค ์ฝํ ์ธ ์ ๋ํํ ํธ๋ฆฌ๋งต ์๊ฐํ๋ฅผ ์์ฑํ์ฌ ์ด๋ค ๋ชจ๋์ด ํฌํจ๋์ด ์๋์ง, ์๋์ ์ธ ํฌ๊ธฐ๋ ์ผ๋ง์ธ์ง, ์ด๋ค ์์กด์ฑ์ ๊ฐ์ ธ์ค๋์ง ์ ํํ๊ฒ ๋ณด์ฌ์ค๋๋ค.
๋์์ด ๋๋ ์ :
- ํฐ ๋ชจ๋ ์๋ณ: ํฌ๊ธฐ๊ฐ ๊ณผ๋ํ๊ฒ ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์น์ ์ ์ฆ์ ๋ฐ๊ฒฌํฉ๋๋ค.
- ์ค๋ณต ๊ฐ์ง: ์ถฉ๋ํ๋ ์์กด์ฑ ๋ฒ์ ์ด๋ ์๋ชป๋ ๊ตฌ์ฑ์ผ๋ก ์ธํด ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋์ด ์ฌ๋ฌ ๋ฒ ํฌํจ๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์๋ ๋๋ค.
- ์์กด์ฑ ํธ๋ฆฌ ์ดํด: ์ฝ๋์ ์ด๋ค ๋ถ๋ถ์ด ํน์ ์๋ํํฐ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ค๋์ง ํ์ธํฉ๋๋ค.
- ํธ๋ฆฌ ์์ดํน ํจ๊ณผ ์ธก์ : ์์๋๋ก ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ ์ธ๊ทธ๋จผํธ๊ฐ ์ค์ ๋ก ์ ๊ฑฐ๋๊ณ ์๋์ง ๊ด์ฐฐํฉ๋๋ค.
์ฌ์ฉ ์์ (์นํฉ): `devDependencies`์ `webpack-bundle-analyzer`๋ฅผ ์ถ๊ฐํ๊ณ `webpack.config.js`์์ ์ค์ ํฉ๋๋ค:
`webpack.config.js` ์ค๋ํซ:
`const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;`
`module.exports = {`
` // ... ๋ค๋ฅธ ์นํฉ ์ค์ `
` plugins: [`
` new BundleAnalyzerPlugin({`
` analyzerMode: 'static', // ์ ์ HTML ํ์ผ ์์ฑ`
` reportFilename: 'bundle-report.html',`
` openAnalyzer: false, // ์๋์ผ๋ก ์ด์ง ์์`
` }),`
` ],`
`};`
๋น๋ ๋ช ๋ น์ด(์: `webpack`)๋ฅผ ์คํํ๋ฉด `bundle-report.html` ํ์ผ์ด ์์ฑ๋๋ฉฐ, ๋ธ๋ผ์ฐ์ ์์ ์ด ์ ์์ต๋๋ค.
2. ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ (์ฑ๋ฅ, ๋ฉ๋ชจ๋ฆฌ, ๋คํธ์ํฌ ํญ)
ํฌ๋กฌ(๋ฐ ์ฃ์ง, ๋ธ๋ ์ด๋ธ, ์คํ๋ผ์ ๊ฐ์ ๋ค๋ฅธ ํฌ๋ก๋ฏธ์ ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ )์ ๋ด์ฅ๋ ๊ฐ๋ฐ์ ๋๊ตฌ๋ ๋ฐํ์ ์ฑ๋ฅ ๋ถ์์ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ป๊ฒ ๋ก๋๋๊ณ , ์คํ๋๋ฉฐ, ๋ฆฌ์์ค๋ฅผ ์๋นํ๋์ง์ ๋ํ ๊น์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
์ฑ๋ฅ ํญ
์ด ํญ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ํ๋์ ํ์๋ผ์ธ์ ๊ธฐ๋กํ์ฌ CPU ์ฌ์ฉ๋, ๋คํธ์ํฌ ์์ฒญ, ๋ ๋๋ง ๋ฐ ์คํฌ๋ฆฝํธ ์คํ์ ํ์ธํ ์ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๋์์ด ๋๋ ์ :
- CPU ํ๋ ์ ์ฐจํธ: ์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ ํธ์ถ ์คํ์ ์๊ฐํํฉ๋๋ค. ๋๊ณ ๋์ ๋ธ๋ก์ ์ฅ๊ธฐ ์คํ ์์ ์ด๋ ์๋นํ CPU ์๊ฐ์ ์๋นํ๋ ํจ์๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ ์ข ์ข ์ต์ ํ๋์ง ์์ ๋ฃจํ, ๋ณต์กํ ๊ณ์ฐ ๋๋ ๋ชจ๋ ๋ด์ ๊ณผ๋ํ DOM ์กฐ์์ ๊ฐ๋ฆฌํต๋๋ค.
- ๊ธด ์์ (Long Tasks): ๋ฉ์ธ ์ค๋ ๋๋ฅผ 50๋ฐ๋ฆฌ์ด ์ด์ ์ฐจ๋จํ์ฌ ๋ฐ์์ฑ์ ์ํฅ์ ๋ฏธ์น๋ ์์ ์ ๊ฐ์กฐ ํ์ํฉ๋๋ค.
- ์คํฌ๋ฆฝํ ํ๋: ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑ, ์ปดํ์ผ, ์คํ๋๋ ์์ ์ ๋ณด์ฌ์ค๋๋ค. ์ฌ๊ธฐ์์ ์คํ์ดํฌ๋ ๋ชจ๋ ๋ก๋ฉ ๋ฐ ์ด๊ธฐ ์คํ์ ํด๋นํฉ๋๋ค.
- ๋คํธ์ํฌ ์์ฒญ: ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ์ธ์ ๋ค์ด๋ก๋๋๊ณ ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋์ง ๊ด์ฐฐํฉ๋๋ค.
์ฌ์ฉ ์์: 1. ๊ฐ๋ฐ์ ๋๊ตฌ(F12 ๋๋ Ctrl+Shift+I)๋ฅผ ์ฝ๋๋ค. 2. "์ฑ๋ฅ(Performance)" ํญ์ผ๋ก ์ด๋ํฉ๋๋ค. 3. ๋ นํ ๋ฒํผ(์ ์์ด์ฝ)์ ํด๋ฆญํฉ๋๋ค. 4. ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ์์ฉํฉ๋๋ค(์: ํ์ด์ง ๋ก๋, ํ์, ํด๋ฆญ). 5. ์ค์ง ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค. ์์ฑ๋ ํ๋ ์ ์ฐจํธ๋ฅผ ๋ถ์ํฉ๋๋ค. "๋ฉ์ธ(Main)" ์ค๋ ๋๋ฅผ ํ์ฅํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ธํฉ๋๋ค. ๋ชจ๋๊ณผ ๊ด๋ จ๋ `Parse Script`, `Compile Script` ๋ฐ ํจ์ ํธ์ถ์ ์ง์คํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํญ
๋ฉ๋ชจ๋ฆฌ ํญ์ ์ต์ ํ๋์ง ์์ ๋ชจ๋๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋์์ด ๋๋ ์ :
- ํ ์ค๋ ์ท: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ์ํ ์ค๋ ์ท์ ์ฐ์ต๋๋ค. ํน์ ์์ (์: ๋ชจ๋ฌ ์ด๊ณ ๋ซ๊ธฐ, ํ์ด์ง ๊ฐ ์ด๋)์ ์ํํ ํ ์ฌ๋ฌ ์ค๋ ์ท์ ๋น๊ตํ์ฌ ๋์ ๋๊ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์งํฉ๋๋ค. ์ด๋ ๋ชจ๋์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐํ๋ผ ์ ์์ต๋๋ค.
- ํ์๋ผ์ธ์ ํ ๋น ๊ณ์ธก: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋์ ์ค์๊ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ์ธํฉ๋๋ค.
์ฌ์ฉ ์์: 1. "๋ฉ๋ชจ๋ฆฌ(Memory)" ํญ์ผ๋ก ์ด๋ํฉ๋๋ค. 2. "ํ ์ค๋ ์ท(Heap snapshot)"์ ์ ํํ๊ณ "์ค๋ ์ท ์ฐ๊ธฐ(Take snapshot)"(์นด๋ฉ๋ผ ์์ด์ฝ)๋ฅผ ํด๋ฆญํฉ๋๋ค. 3. ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ ์ ์๋ ์์ ์ ์ํํฉ๋๋ค(์: ๋ฐ๋ณต์ ์ธ ํ์). 4. ๋ค๋ฅธ ์ค๋ ์ท์ ์ฐ์ต๋๋ค. ๋๋กญ๋ค์ด์ ์ฌ์ฉํ์ฌ ๋ ์ค๋ ์ท์ ๋น๊ตํ๊ณ , ๊ฐ์๊ฐ ํ์ ํ ์ฆ๊ฐํ `(object)` ํญ๋ชฉ์ ์ฐพ์ต๋๋ค.
๋คํธ์ํฌ ํญ
์๋ฐํ ๋งํด ๋ชจ๋ ํ๋กํ์ผ๋ง์ฉ์ ์๋์ง๋ง, ๋คํธ์ํฌ ํญ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ด ๋คํธ์ํฌ๋ฅผ ํตํด ์ด๋ป๊ฒ ๋ก๋๋๋์ง ์ดํดํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋์์ด ๋๋ ์ :
- ๋ฆฌ์์ค ํฌ๊ธฐ: ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ค์ ํฌ๊ธฐ(์ ์ก๋ ํฌ๊ธฐ์ ์์ถ ํด์ ๋ ํฌ๊ธฐ)๋ฅผ ํ์ธํฉ๋๋ค.
- ๋ก๋ ์๊ฐ: ๊ฐ ์คํฌ๋ฆฝํธ๊ฐ ๋ค์ด๋ก๋๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ถ์ํฉ๋๋ค.
- ์์ฒญ ์ํฐํด: ๋คํธ์ํฌ ์์ฒญ์ ์์์ ์์กด์ฑ์ ์ดํดํฉ๋๋ค.
์ฌ์ฉ ์์: 1. "๋คํธ์ํฌ(Network)" ํญ์ ์ฝ๋๋ค. 2. "JS"๋ก ํํฐ๋งํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ง ๋ด ๋๋ค. 3. ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์นฉ๋๋ค. ํฌ๊ธฐ์ ํ์ด๋ฐ ์ํฐํด์ ๊ด์ฐฐํฉ๋๋ค. ๋๋ฆฐ ๋คํธ์ํฌ ์กฐ๊ฑด(์: "Fast 3G" ๋๋ "Slow 3G" ํ๋ฆฌ์ )์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ๊ธ๋ก๋ฒ ์ฌ์ฉ์์ ์ฑ๋ฅ์ ์ดํดํฉ๋๋ค.
3. ๋ผ์ดํธํ์ฐ์ค(Lighthouse)์ ํ์ด์ง์คํผ๋ ์ธ์ฌ์ดํธ(PageSpeed Insights)
๋ผ์ดํธํ์ฐ์ค๋ ์น ํ์ด์ง์ ํ์ง์ ๊ฐ์ ํ๊ธฐ ์ํ ์คํ ์์ค ์๋ํ ๋๊ตฌ์ ๋๋ค. ์ฑ๋ฅ, ์ ๊ทผ์ฑ, ํ๋ก๊ทธ๋ ์๋ธ ์น ์ฑ, SEO ๋ฑ์ ๊ฐ์ฌํฉ๋๋ค. ํ์ด์ง์คํผ๋ ์ธ์ฌ์ดํธ๋ ๋ผ์ดํธํ์ฐ์ค ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ ์ ์์ ์คํ ๊ฐ๋ฅํ ๊ถ์ฅ ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
๋์์ด ๋๋ ์ :
- ์ ๋ฐ์ ์ธ ์ฑ๋ฅ ์ ์: ์ ํ๋ฆฌ์ผ์ด์ ์๋์ ๋ํ ๋์ ์์ค์ ์๊ฐ์ ์ ๊ณตํฉ๋๋ค.
- ์ฝ์ด ์น ๋ฐ์ดํ(Core Web Vitals): ์ต๋ ์ฝํ ์ธ ํ ํ์ธํธ(LCP), ์ต์ด ์ ๋ ฅ ์ง์ฐ(FID), ๋์ ๋ ์ด์์ ์ด๋(CLS)๊ณผ ๊ฐ์ ์งํ๋ฅผ ๋ณด๊ณ ํ๋ฉฐ, ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๋ฐ ์คํ์ ํฐ ์ํฅ์ ๋ฐ์ต๋๋ค.
- ์คํ ๊ฐ๋ฅํ ๊ถ์ฅ ์ฌํญ: "์๋ฐ์คํฌ๋ฆฝํธ ์คํ ์๊ฐ ์ค์ด๊ธฐ", "๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค ์ ๊ฑฐ", "์ฌ์ฉํ์ง ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ค์ด๊ธฐ"์ ๊ฐ์ ํน์ ์ต์ ํ๋ฅผ ์ ์ํ๋ฉฐ, ์ข ์ข ํน์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์ง์ ํฉ๋๋ค.
์ฌ์ฉ ์์: 1. ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ์์ "๋ผ์ดํธํ์ฐ์ค(Lighthouse)" ํญ์ผ๋ก ์ด๋ํฉ๋๋ค. 2. ์นดํ ๊ณ ๋ฆฌ(์: ์ฑ๋ฅ)์ ๊ธฐ๊ธฐ ์ ํ(๋ชจ๋ฐ์ผ์ด ๊ธ๋ก๋ฒ ์ฑ๋ฅ์ ๋ํด ๋ ๋ง์ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์)์ ์ ํํฉ๋๋ค. 3. "ํ์ด์ง ๋ก๋ ๋ถ์(Analyze page load)"์ ํด๋ฆญํฉ๋๋ค. ์์ธํ ์ง๋จ ๋ฐ ๊ฐ์ ๊ธฐํ๋ฅผ ์ํด ๋ณด๊ณ ์๋ฅผ ๊ฒํ ํฉ๋๋ค.
4. ์์ค ๋งต ์ต์คํ๋ก๋ฌ(๋ฐ ์ ์ฌ ๋๊ตฌ)
์นํฉ ๋ฒ๋ค ์ ๋๋ผ์ด์ ์ ์ ์ฌํ๊ฒ, ์์ค ๋งต ์ต์คํ๋ก๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ํธ๋ฆฌ๋งต ์๊ฐํ๋ฅผ ์ ๊ณตํ์ง๋ง ์์ค ๋งต์ ์ฌ์ฉํ์ฌ ๋งต์ ๊ตฌ์ถํฉ๋๋ค. ์ด๋ ๋๋๋ก ์ด๋ค ์๋ณธ ์์ค ํ์ผ์ด ์ต์ข ๋ฒ๋ค์ ์ผ๋ง๋ ๊ธฐ์ฌํ๋์ง์ ๋ํ ์ฝ๊ฐ ๋ค๋ฅธ ๊ด์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
๋์์ด ๋๋ ์ : ๋ฒ๋ค ๊ตฌ์ฑ์ ๋ํ ๋์ฒด ์๊ฐํ๋ฅผ ์ ๊ณตํ์ฌ ๋ฒ๋ค๋ฌ๋ณ ๋๊ตฌ์๋ ๋ค๋ฅธ ํต์ฐฐ๋ ฅ์ ํ์ธํ๊ฑฐ๋ ์ ๊ณตํฉ๋๋ค.
์ฌ์ฉ ์์: npm/yarn์ ํตํด `source-map-explorer`๋ฅผ ์ค์นํฉ๋๋ค. ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค๊ณผ ์์ค ๋งต์ ๋ํด ์คํํฉ๋๋ค:
`source-map-explorer build/static/js/*.js --html`
์ด ๋ช ๋ น์ด๋ ์นํฉ ๋ฒ๋ค ์ ๋๋ผ์ด์ ์ ์ ์ฌํ HTML ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค.
ํจ๊ณผ์ ์ธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ ์ํ ์ค์ง์ ์ธ ๋จ๊ณ
ํ๋กํ์ผ๋ง์ ๋ฐ๋ณต์ ์ธ ๊ณผ์ ์ ๋๋ค. ๋ค์์ ์ฒด๊ณ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค:
1. ๊ธฐ์ค์ ์ค์
๋ณ๊ฒฝ์ ๊ฐํ๊ธฐ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฌ ์ฑ๋ฅ ์งํ๋ฅผ ํฌ์ฐฉํฉ๋๋ค. ๋ผ์ดํธํ์ฐ์ค, ํ์ด์ง์คํผ๋ ์ธ์ฌ์ดํธ, ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ๋ฒ๋ค ํฌ๊ธฐ, ๋ก๋ ์๊ฐ, ๋ฐํ์ ์ฑ๋ฅ์ ๊ธฐ๋กํฉ๋๋ค. ์ด ๊ธฐ์ค์ ์ ์ต์ ํ ํจ๊ณผ๋ฅผ ์ธก์ ํ๋ ๋ฒค์น๋งํฌ๊ฐ ๋ ๊ฒ์ ๋๋ค.
2. ๋น๋ ํ๋ก์ธ์ค ๊ณ์ธก
์นํฉ ๋ฒ๋ค ์ ๋๋ผ์ด์ ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ๋น๋ ํ์ดํ๋ผ์ธ์ ํตํฉํฉ๋๋ค. ๋ฒ๋ค ๋ณด๊ณ ์ ์์ฑ์ ์๋ํํ์ฌ ์ค์ํ ์ฝ๋ ๋ณ๊ฒฝ ํ๋ ์ ๊ธฐ์ ์ผ๋ก(์: ์ผ๊ฐ ๋น๋) ์ ์ํ๊ฒ ๊ฒํ ํ ์ ์๋๋ก ํฉ๋๋ค.
3. ๋ฒ๋ค ๊ตฌ์ฑ ๋ถ์
๋ฒ๋ค ๋ถ์ ๋ณด๊ณ ์(์นํฉ ๋ฒ๋ค ์ ๋๋ผ์ด์ , ์์ค ๋งต ์ต์คํ๋ก๋ฌ)๋ฅผ ์ฝ๋๋ค. ๋ค์์ ์ง์คํ์ธ์:
- ๊ฐ์ฅ ํฐ ์ฌ๊ฐํ: ๊ฐ์ฅ ํฐ ๋ชจ๋์ด๋ ์์กด์ฑ์ ๋ํ๋ ๋๋ค. ์ ๋ง ํ์ํ๊ฐ์? ์ค์ผ ์ ์๋์?
- ์ค๋ณต ๋ชจ๋: ๋์ผํ ํญ๋ชฉ์ ์ฐพ์ต๋๋ค. ์์กด์ฑ ์ถฉ๋์ ํด๊ฒฐํ์ธ์.
- ์ฌ์ฉํ์ง ์๋ ์ฝ๋: ์ ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ทธ ์๋น ๋ถ๋ถ์ด ํฌํจ๋์์ง๋ง ์ฌ์ฉ๋์ง ์๋์? ์ด๋ ์ ์ฌ์ ์ธ ํธ๋ฆฌ ์์ดํน ๋ฌธ์ ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
4. ๋ฐํ์ ๋์ ํ๋กํ์ผ๋ง
ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ์ ์ฑ๋ฅ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํญ์ ์ฌ์ฉํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ์ฌ์ฉ์ ํ๋ฆ(์: ์ด๊ธฐ ๋ก๋, ๋ณต์กํ ํ์ด์ง๋ก ์ด๋, ๋ฐ์ดํฐ ์ง์ฝ์ ์ปดํฌ๋ํธ์ ์ํธ์์ฉ)์ ๊ธฐ๋กํฉ๋๋ค. ๋ค์์ ์ธ์ฌํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ธ์:
- ๋ฉ์ธ ์ค๋ ๋์ ๊ธด ์์ : ๋ฐ์์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ฅผ ์๋ณํฉ๋๋ค.
- ๊ณผ๋ํ CPU ์ฌ์ฉ๋: ๊ณ์ฐ ์ง์ฝ์ ์ธ ๋ชจ๋์ ์ฐพ์๋ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ: ๋ชจ๋๋ก ์ธํ ์ ์ฌ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋์๋ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๊ฐ์งํฉ๋๋ค.
5. ํซ์คํ ์๋ณ ๋ฐ ์ฐ์ ์์ ์ง์
๋ถ์์ ๋ฐํ์ผ๋ก ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ฐ์ ์์ ๋ชฉ๋ก์ ๋ง๋ญ๋๋ค. ์ฒ์์๋ ์ต์ํ์ ๋ ธ๋ ฅ์ผ๋ก ๊ฐ์ฅ ํฐ ์ ์ฌ์ ์ด๋์ ์ ๊ณตํ๋ ๋ฌธ์ ์ ์ง์คํ์ธ์. ์๋ฅผ ๋ค์ด, ์ฌ์ฉํ์ง ์๋ ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์์ ํจ์๋ฅผ ๋ฏธ์ธํ๊ฒ ์ต์ ํํ๋ ๊ฒ๋ณด๋ค ๋ ํฐ ์ํฅ์ ๋ฏธ์น ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
6. ๋ฐ๋ณต, ์ต์ ํ ๋ฐ ์ฌํ๋กํ์ผ๋ง
์ ํํ ์ต์ ํ ์ ๋ต(์๋์์ ์ค๋ช )์ ๊ตฌํํฉ๋๋ค. ์ค์ํ ์ต์ ํ๋ฅผ ์ํํ ํ์๋ ๋์ผํ ๋๊ตฌ์ ์งํ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ํ๋กํ์ผ๋งํฉ๋๋ค. ์๋ก์ด ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค์ ๊ณผ ๋น๊ตํ์ธ์. ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ํ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์ณค๋์? ์๋ก์ด ์ฑ๋ฅ ์ ํ(regression)๋ ์๋์? ์ด ๋ฐ๋ณต์ ์ธ ๊ณผ์ ์ ์ง์์ ์ธ ๊ฐ์ ์ ๋ณด์ฅํฉ๋๋ค.
๋ชจ๋ ํ๋กํ์ผ๋ง ํต์ฐฐ๋ ฅ์ ํตํ ๊ณ ๊ธ ์ต์ ํ ์ ๋ต
ํ๋กํ์ผ๋ง์ ํตํด ๊ฐ์ ํ ์์ญ์ ํ์ ํ๋ค๋ฉด, ๋ค์ ์ ๋ต์ ์ ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ์ต์ ํํ์ธ์:
1. ์ ๊ทน์ ์ธ ํธ๋ฆฌ ์์ดํน (๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ)
๋ฒ๋ค๋ฌ๊ฐ ์ต์ ์ ํธ๋ฆฌ ์์ดํน์ ์ํด ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ธ์. ์ด๋ ํนํ ๋ถ๋ถ์ ์ผ๋ก๋ง ์ฌ์ฉํ๋ ๋๊ท๋ชจ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
- ESM ์ฐ์ : ํญ์ ES ๋ชจ๋ ๋น๋๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํธํ์ธ์. ๋ณธ์ง์ ์ผ๋ก ๋ ํธ๋ฆฌ ์์ดํน์ด ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
- `sideEffects`: `package.json`์์ `"sideEffects": false` ์์ฑ์ด๋ ๋ถ์ ํจ๊ณผ๊ฐ *์๋* ํ์ผ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ถ์ ํจ๊ณผ๊ฐ ์๋ ํด๋๋ ํ์ผ์ ํ์ํ์ธ์. ์ด๋ ์นํฉ๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ์๊ฒ ์ฌ์ฉ๋์ง ์๋ import๋ฅผ ๊ฑฑ์ ์์ด ์์ ํ๊ฒ ์ ๊ฑฐํ ์ ์์์ ์๋ ค์ค๋๋ค.
- ์์ ์ด๋ ธํ ์ด์ (Pure Annotations): ์ ํธ๋ฆฌํฐ ํจ์๋ ์์ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ, ํจ์ ํธ์ถ์ด๋ ํํ์ ์์ `/*#__PURE__*/` ์ฃผ์์ ์ถ๊ฐํ์ฌ terser(์๋ฐ์คํฌ๋ฆฝํธ ์ต์ํ/๋๋ ํ ๋๊ตฌ)์๊ฒ ๊ฒฐ๊ณผ๊ฐ ์์ํ๋ฉฐ ์ฌ์ฉ๋์ง ์์ผ๋ฉด ์ ๊ฑฐ๋ ์ ์๋ค๋ ํํธ๋ฅผ ์ฃผ์ธ์.
- ํน์ ์ปดํฌ๋ํธ import: `import { Button, Input } from 'my-ui-library';` ๋์ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ฉํ๋ค๋ฉด `import Button from 'my-ui-library/Button';`์ ๊ฐ์ด ํ์ํ ์ปดํฌ๋ํธ๋ง ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ ํธํ์ธ์.
2. ์ ๋ต์ ์ฝ๋ ์คํ๋ฆฌํ ๋ฐ ์ง์ฐ ๋ก๋ฉ
๋ฉ์ธ ๋ฒ๋ค์ ์ฃผ๋ฌธํ์ผ๋ก ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋์ธ์. ์ด๋ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
- ๊ฒฝ๋ก ๊ธฐ๋ฐ ์คํ๋ฆฌํ : ์ฌ์ฉ์๊ฐ ํน์ ํ์ด์ง๋ ๊ฒฝ๋ก๋ก ์ด๋ํ ๋๋ง ํด๋น ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํฉ๋๋ค. ๋๋ถ๋ถ์ ํ๋ ํ๋ ์์ํฌ(React์ `React.lazy()`์ `Suspense`, Vue Router์ ์ง์ฐ ๋ก๋ฉ, Angular์ ์ง์ฐ ๋ก๋ ๋ชจ๋)๋ ์ด๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค. ๋์ `import()` ์ฌ์ฉ ์์: `const MyComponent = lazy(() => import('./MyComponent'));`
- ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์คํ๋ฆฌํ : ์ด๊ธฐ ๋ทฐ์ ์ค์ํ์ง ์์ ๋ฌด๊ฑฐ์ด ์ปดํฌ๋ํธ(์: ๋ณต์กํ ์ฐจํธ, ๋ฆฌ์น ํ ์คํธ ์๋ํฐ, ๋ชจ๋ฌ)๋ฅผ ์ง์ฐ ๋ก๋ํฉ๋๋ค.
- ๋ฒค๋ ์คํ๋ฆฌํ : ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฒด ์ฒญํฌ๋ก ๋ถ๋ฆฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ๋ฒค๋ ์ฝ๋๋ฅผ ๋ณ๋๋ก ์บ์ํ ์ ์์ผ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ค์ ๋ค์ด๋ก๋ํ ํ์๊ฐ ์์ต๋๋ค.
- ํ๋ฆฌํ์นญ/ํ๋ฆฌ๋ก๋ฉ: `` ๋๋ ``๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ ํด ์ํ์ผ ๋ ๋ธ๋ผ์ฐ์ ์ ํฅํ ์ฒญํฌ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ค์ด๋ก๋ํ๋๋ก ํํธ๋ฅผ ์ค๋๋ค. ์ด๋ ๊ณง ํ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์ ์์ฐ์ ์ ์ฉํฉ๋๋ค.
3. ์ต์ํ ๋ฐ ๋๋ ํ
ํญ์ ํ๋ก๋์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ์ต์ํํ๊ณ ๋๋ ํํ์ธ์. ์นํฉ์ฉ Terser๋ ๋กค์ ์ฉ UglifyJS์ ๊ฐ์ ๋๊ตฌ๋ ๋ถํ์ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ณ์ ์ด๋ฆ์ ์ค์ด๋ฉฐ, ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์์ด ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ค๋ฅธ ์ต์ ํ๋ฅผ ์ ์ฉํฉ๋๋ค.
4. ์์กด์ฑ ๊ด๋ฆฌ ์ต์ ํ
๋์ ํ๋ ์์กด์ฑ์ ์ ์ํ์ธ์. ๋ชจ๋ `npm install`์ ๋ฒ๋ค์ ์๋ก์ด ์ฝ๋๋ฅผ ๊ฐ์ ธ์ฌ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
- ์์กด์ฑ ๊ฐ์ฌ: `npm-check-updates`๋ `yarn outdated`์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ์ต์ ์ํ๋ก ์ ์งํ๊ณ ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ๋ฌ ๋ฒ์ ์ด ํฌํจ๋๋ ๊ฒ์ ํผํ์ธ์.
- ๋์ ๊ณ ๋ ค: ๋ ์๊ณ ์ง์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌ๊ณ ๋ฒ์ฉ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋์ผํ ๊ธฐ๋ฅ์ ๋ฌ์ฑํ ์ ์๋์ง ํ๊ฐํ์ธ์. ์๋ฅผ ๋ค์ด, ๋ช ๊ฐ์ง ํจ์๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ฒด Lodash ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ ๋ฐฐ์ด ์กฐ์์ ์ํ ์์ ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
- ํน์ ๋ชจ๋ import: ์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ ๊ฐ๋ณ ํจ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ์ฉํ๋ฉฐ(์: `import throttle from 'lodash/throttle';`), ์ด๋ ํธ๋ฆฌ ์์ดํน์ ์ด์์ ์ ๋๋ค.
5. ๋ฌด๊ฑฐ์ด ๊ณ์ฐ์ ์ํ ์น ์์ปค
์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ (์: ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ด๋ฏธ์ง ์กฐ์, ๋ฌด๊ฑฐ์ด ๊ณ์ฐ)์ ์ํํ๋ ๊ฒฝ์ฐ, ์น ์์ปค๋ก ์คํ๋ก๋ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. ์น ์์ปค๋ ๋ณ๋์ ์ค๋ ๋์์ ์คํ๋๋ฏ๋ก ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๊ณ UI๊ฐ ๋ฐ์์ฑ์ ์ ์งํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์: UI ์ฐจ๋จ์ ํผํ๊ธฐ ์ํด ์น ์์ปค์์ ํผ๋ณด๋์น ์ ๊ณ์ฐํ๊ธฐ.
`// main.js`
`const worker = new Worker('worker.js');`
`worker.postMessage({ number: 40 });`
`worker.onmessage = (e) => {`
` console.log('Result from worker:', e.data.result);`
`};`
`// worker.js`
`self.onmessage = (e) => {`
` const result = fibonacci(e.data.number); // ๋ฌด๊ฑฐ์ด ๊ณ์ฐ`
` self.postMessage({ result });`
`};`
6. ์ด๋ฏธ์ง ๋ฐ ๊ธฐํ ์์ฐ ์ต์ ํ
์ง์ ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ์๋์ง๋ง, ํฐ ์ด๋ฏธ์ง๋ ์ต์ ํ๋์ง ์์ ํฐํธ๋ ์ ์ฒด ํ์ด์ง ๋ก๋์ ์๋นํ ์ํฅ์ ๋ฏธ์ณ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์๋์ ์ผ๋ก ๋๋ฆฌ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๋ชจ๋ ์์ฐ์ด ์ต์ ํ๋๊ณ ์์ถ๋์๋์ง ํ์ธํ๊ณ , ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ฝํ ์ธ ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๊ณตํ๊ธฐ ์ํด ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN)๋ฅผ ํตํด ์ ๋ฌ๋๋๋ก ํ์ธ์.
7. ๋ธ๋ผ์ฐ์ ์บ์ฑ ๋ฐ ์๋น์ค ์์ปค
HTTP ์บ์ฑ ํค๋๋ฅผ ํ์ฉํ๊ณ ์๋น์ค ์์ปค๋ฅผ ๊ตฌํํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค ๋ฐ ๊ธฐํ ์์ฐ์ ์บ์ํ์ธ์. ์ด๋ฅผ ํตํด ์ฌ๋ฐฉ๋ฌธ ์ฌ์ฉ์๊ฐ ๋ชจ๋ ๊ฒ์ ๋ค์ ๋ค์ด๋ก๋ํ ํ์๊ฐ ์์ด์ ธ ๊ฑฐ์ ์ฆ๊ฐ์ ์ธ ํ์ ๋ก๋๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
์คํ๋ผ์ธ ๊ธฐ๋ฅ์ ์ํ ์๋น์ค ์์ปค: ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ธ์ด๋ ์ค์ํ ์์ฐ์ ์บ์ํ์ฌ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋ถ์์ ํ ์ง์ญ์์ ์๋นํ ์ด์ ์ ์ ๊ณตํ๋, ๋คํธ์ํฌ ์ฐ๊ฒฐ ์์ด๋ ์ฑ์ ์ ๊ทผํ ์ ์๊ฒ ๋ง๋ญ๋๋ค.
์ฑ๋ฅ ๋ถ์์ ๊ณผ์ ์ ๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ
์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ์ต์ ํํ๋ ๊ฒ์ ๋ชจ๋ ํ๋กํ์ผ๋ง์ด ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋๋ ๋ ํนํ ๊ณผ์ ๋ฅผ ์ ๊ธฐํฉ๋๋ค:
- ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด: ์ ํฅ ์์ฅ์ด๋ ๋์ด ์ง์ญ์ ์ฌ์ฉ์๋ ์ข ์ข ๋๋ฆฌ๊ณ , ๊ฐํ์ ์ด๊ฑฐ๋, ๋น์ผ ๋ฐ์ดํฐ ์ฐ๊ฒฐ๊ณผ ์จ๋ฆํฉ๋๋ค. ์์ ๋ฒ๋ค ํฌ๊ธฐ์ ํจ์จ์ ์ธ ๋ก๋ฉ์ด ์ฌ๊ธฐ์๋ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ํ๋กํ์ผ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ฌํ ํ๊ฒฝ์ ์ถฉ๋ถํ ๊ฐ๋ณ๋๋ก ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋ค์ํ ๊ธฐ๊ธฐ ์ฑ๋ฅ: ๋ชจ๋ ์ฌ๋์ด ์ต์ ์ค๋งํธํฐ์ด๋ ๊ณ ์ฌ์ ๋ ธํธ๋ถ์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋๋ค. ๊ตฌํ ๋๋ ์ ์ฌ์ ๊ธฐ๊ธฐ๋ CPU ์ฑ๋ฅ๊ณผ RAM์ด ์ ์ด ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ, ์ปดํ์ผ, ์คํ์ด ๋ ๋๋ฆฝ๋๋ค. ํ๋กํ์ผ๋ง์ ์ด๋ฌํ ๊ธฐ๊ธฐ์์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ CPU ์ง์ฝ์ ์ธ ๋ชจ๋์ ์๋ณํฉ๋๋ค.
- ์ง๋ฆฌ์ ๋ถํฌ์ CDN: CDN์ด ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ ๊ฐ๊น๊ฒ ๋ฐฐํฌํ์ง๋ง, ์ค๋ฆฌ์ง ์๋ฒ๋ CDN์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ์ฒ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ์ฌ์ ํ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ํ๋กํ์ผ๋ง์ CDN ์ ๋ต์ด ๋ชจ๋ ์ ๋ฌ์ ํจ๊ณผ์ ์ธ์ง ํ์ธํฉ๋๋ค.
- ์ฑ๋ฅ์ ๋ฌธํ์ ๋งฅ๋ฝ: "๋น ๋ฅด๋ค"๋ ์ธ์์ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํธ์์ฉ ๊ฐ๋ฅ ์๊ฐ ๋ฐ ์ ๋ ฅ ์ง์ฐ๊ณผ ๊ฐ์ ๋ณดํธ์ ์ธ ์งํ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ฌ์ ํ ์ค์ํฉ๋๋ค. ๋ชจ๋ ํ๋กํ์ผ๋ง์ ์ด๋ฌํ ์งํ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ง์ ๊ฐ๋ฅํ ๋ชจ๋ ์ฑ๋ฅ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ฑ๋ฅ ์ต์ ํ๋ ์ผํ์ฑ ์์ ์ด ์๋ ์ง์์ ์ธ ์ฌ์ ์ ๋๋ค. ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ฐ๋ฐ ์ํฌํ๋ก์ ํตํฉํ์ธ์:
- ์๋ํ๋ ์ฑ๋ฅ ํ ์คํธ: ์ง์์ ์ธ ํตํฉ/์ง์์ ์ธ ๋ฐฐํฌ(CI/CD) ํ์ดํ๋ผ์ธ์ ์ฑ๋ฅ ๊ฒ์ฌ๋ฅผ ํตํฉํ์ธ์. Lighthouse CI ๋๋ ์ ์ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ ๋ฆฌํ์คํธ๋ ๋น๋์ ๋ํด ๊ฐ์ฌ๋ฅผ ์คํํ๊ณ , ์ฑ๋ฅ ์งํ๊ฐ ์ ์๋ ์๊ณ๊ฐ(์ฑ๋ฅ ์์ฐ)์ ์ด๊ณผํ๋ฉด ๋น๋๋ฅผ ์คํจ์ํต๋๋ค.
- ์ฑ๋ฅ ์์ฐ ์ค์ : ๋ฒ๋ค ํฌ๊ธฐ, ์คํฌ๋ฆฝํธ ์คํ ์๊ฐ ๋ฐ ๊ธฐํ ํต์ฌ ์งํ์ ๋ํด ํ์ฉ ๊ฐ๋ฅํ ํ๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ์์ฐ์ ํ์ ์ ๋ฌํ๊ณ ์ค์๋๋๋ก ํฉ๋๋ค.
- ์ ๊ธฐ์ ์ธ ํ๋กํ์ผ๋ง ์ธ์ : ์ฑ๋ฅ ํ๋กํ์ผ๋ง์ ์ํ ์ ์ฉ ์๊ฐ์ ์ ๊ธฐ์ ์ผ๋ก ๊ณํํฉ๋๋ค. ์ด๋ ์๋ณ, ๋ถ๊ธฐ๋ณ ๋๋ ์ฃผ์ ๋ฆด๋ฆฌ์ค ์ ์ ์ํ๋ ์ ์์ต๋๋ค.
- ํ ๊ต์ก: ๊ฐ๋ฐํ ๋ด์์ ์ฑ๋ฅ ์ธ์ ๋ฌธํ๋ฅผ ์กฐ์ฑํฉ๋๋ค. ๋ชจ๋ ์ฌ๋์ด ์์ ์ ์ฝ๋๊ฐ ๋ฒ๋ค ํฌ๊ธฐ์ ๋ฐํ์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ดํดํ๋๋ก ํฉ๋๋ค. ํ๋กํ์ผ๋ง ๊ฒฐ๊ณผ์ ์ต์ ํ ๊ธฐ์ ์ ๊ณต์ ํ์ธ์.
- ํ๋ก๋์ ํ๊ฒฝ ๋ชจ๋ํฐ๋ง (RUM): ์ค์ ์ฌ์ฉ ํ๊ฒฝ์์ ์ค์ ์ฌ์ฉ์๋ก๋ถํฐ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ ์ํด ์ค์ฌ์ฉ์ ๋ชจ๋ํฐ๋ง(RUM) ๋๊ตฌ(์: Google Analytics, Sentry, New Relic, Datadog)๋ฅผ ๊ตฌํํฉ๋๋ค. RUM์ ์คํ์ค ํ๊ฒฝ์ ํ๋กํ์ผ๋ง์ ๋ณด์ํ์ฌ, ๋ค์ํ ์ค์ ์กฐ๊ฑด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ๊ท์คํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์์กด์ฑ์ ๊ฐ๋ณ๊ฒ ์ ์ง: ํ๋ก์ ํธ์ ์์กด์ฑ์ ์ ๊ธฐ์ ์ผ๋ก ๊ฒํ ํ๊ณ ์ ๋ฆฌํฉ๋๋ค. ์ฌ์ฉํ์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๊ณ , ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ ๋์ ์ฑ๋ฅ ์ํฅ์ ๊ณ ๋ คํ์ธ์.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ ๊ฐ๋ฐ์๊ฐ ์ถ์ธก์ ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋ํด ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๋ก ํ๋ ๊ฐ๋ ฅํ ๋ถ์ผ์ ๋๋ค. ์นํฉ ๋ฒ๋ค ์ ๋๋ผ์ด์ ๋ ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๊ฐ์ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ํ์ฉํ๊ณ , ๋ฒ๋ค ๊ตฌ์ฑ๊ณผ ๋ฐํ์ ๋์์ ๋ถ์ง๋ฐํ ๋ถ์ํ๋ฉฐ, ํธ๋ฆฌ ์์ดํน๊ณผ ์ฝ๋ ์คํ๋ฆฌํ ๊ณผ ๊ฐ์ ์ ๋ต์ ์ต์ ํ๋ฅผ ์ ์ฉํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋์ ๋ฐ์์ฑ์ ๊ทน์ ์ผ๋ก ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ฆ๊ฐ์ ์ธ ๋ง์กฑ๊ณผ ์ด๋์๋ ์ ๊ทผํ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ ์ธ์์์, ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋จ์ํ ๊ฒฝ์ ์ฐ์๊ฐ ์๋๋ผ ๊ธฐ๋ณธ์ ์ธ ์๊ตฌ ์ฌํญ์ ๋๋ค. ๋ชจ๋ ํ๋กํ์ผ๋ง์ ์ผํ์ฑ ์์ ์ด ์๋ ๊ฐ๋ฐ ๋ผ์ดํ์ฌ์ดํด์ ํ์์ ์ธ ๋ถ๋ถ์ผ๋ก ๋ฐ์๋ค์ด์ธ์. ์ ์ธ๊ณ ์ฌ์ฉ์๋ค์ด ๋ ๋น ๋ฅด๊ณ , ๋ถ๋๋ฌ์ฐ๋ฉฐ, ๋ ๋งค๋ ฅ์ ์ธ ๊ฒฝํ์ ๊ฐ์ฌํ ๊ฒ์ ๋๋ค.